1 Einleitung

Wir beschäftigen uns mit den Daten des Bundesamt für Meteorologie. Wir haben dafür einen Export der Wetterstation Jungfraujoch (3571 m ü.M.) vom Jahr 2020.

2 Hypothese / Fragestellungen

  1. Es gibt viele Korrelationen zwischen den verschiedenen Variablen.
  2. Über das ganze Jahr (2020) blieb die mittlere Tagestemperatur unter 0°C.
  3. Auf dem Jungfraujoch ist es kurz vor Sonnenaufgang am kältesten.
  4. Die Sonne scheint auf dem Jungfraujoch das ganze Jahr etwa gleich lange.

3 Vorbereitung

3.1 Libraries importieren

library(plotly)
library(corrplot)
library(lubridate)
library(tidyverse)

3.2 Data Wrangling

data_unclean <- read.csv(file = "Meteodaten.csv", sep = ";")
data_unclean <- data.frame(lapply(data_unclean, as.numeric))
data_unclean$time <- ymd_hm(data_unclean$time)
data <- data_unclean

data <- data %>%
  select(time,
    "Böenspitze" = fkl010z1, # in Meter/Sekunde
    "Windgeschwindigkeit" = fkl010za, # in Meter/Sekunde
    "Windrichtung" = dkl010za, # in Grad
    "Sonnenscheindauer" = sre000z0, # in Minuten
    "Gesamtbewölkung" = nto000s0, # in octas
    "Luftfeuchtigkeit" = ure200s0, # in Prozent
    "Lufttemperatur" = tre200s0, # in Grad Celsius
    "Luftdruck" = prestas0 # in Hectopascal
  ) # Erweiterbar :)

# Ersetzt durch lapply
# data$Böenspitze <- as.numeric(data$Böenspitze)
# data$Windgeschwindigkeit <- as.numeric(data$Windgeschwindigkeit)
# data$Windrichtung <- as.numeric(data$Windrichtung)
# data$Sonnenscheindauer <- as.numeric(data$Sonnenscheindauer)
# data$Gesamtbewölkung <- as.numeric(data$Gesamtbewölkung)
# data$Luftfeuchtigkeit <- as.numeric(data$Luftfeuchtigkeit)
# data$Lufttemperatur <- as.numeric(data$Lufttemperatur)
# data$Luftdruck <- as.numeric(data$Luftdruck)
# data$Betrag_mittlere_Wolken <- as.numeric(data$Betrag_mittlere_Wolken)
# data$Betrag_untere_Wolken <- as.numeric(data$Betrag_untere_Wolken)

4 Beantwortung der Fragestellungen

4.1 Es gibt viele Korrelationen zwischen den verschiedenen Variablen.

corrData <- cor(data_unclean[3:31], use = "pairwise.complete.obs")
corrplot(corrData, method = "ellipse", order = "alphabet", type = "upper", tl.pos = "lt")

Im ganzen Datensatz haben wir zu viele Variablen um eine verständliche Visualisierung über die Korrelationen aller Variablen zu erstellen. Jedoch lohnt sich diese Erstellung dieser Visualisierung um zu bestimmmen, welche Features man im reduzierten Datensatz übernehmen möchte. Das Bundesamt für Meteorologie hat die Namen dieser Variablen kodiert, deswegen müssen wir anhand der mitgelieferten Tabelle schauen, für was diese Codes stehen:

Parameter Einheit Beschreibung
uto200s0 g/m^2 Absolute Luftfeuchtigkeit 2 m über Boden; Momentanwert
ns2000s0 octas Betrag der mittleren Wolken
ns1000s0 octas Betrag der untersten Wolken
fkl010z1 m/s Böenspitze (Sekundenböe); Maximum
xchills0 °C Chill Temperatur; Momentanwert
pva200s0 hPa Dampfdruck 2 m über Boden; Momentanwert
pvd200s0 hPa Dampfdruckdefizit 2 m über Boden; Momentanwert
tre2desd °C Differenz Lufttemperatur 2 m über Boden - Taupunkt; Momentanwert
tpp200s0 °C Feuchtpotentielle Temperatur 2 m über Boden; Momentanwert
tps200s0 °C Feuchttemperatur (Psychrometertemperatur) 2 m über Boden; Momentanwert
nto000s0 octas Gesamtbewölkung
gor000za W/m^2 Globalstrahlung; Standardabweichung
gre000z0 W/m^2 Globalstrahlung; Zehnminutenmittel
oli000z0 W/m^2 Langwellige Einstrahlung; Zehnminutenmittel
prestas0 hPa Luftdruck auf Barometerhöhe (QFE); Momentanwert
pp0qnhs0 hPa Luftdruck reduziert auf Meeresniveau mit Standardatmosphäre (QNH); Momentanwert
tre200s0 °C Lufttemperatur 2 m über Boden; Momentanwert
pvamixs0 g/kg Mischungsverhältnis
uor200s0 % Original Luftfeuchtigkeit 2 m über Boden; Momentanwert
tpo200s0 °C Potentielle Temperatur 2 m über Boden; Momentanwert
ure200s0 % Relative Luftfeuchtigkeit 2 m über Boden; Momentanwert
sre000z0 min Sonnenscheindauer; Zehnminutensumme
usp200s0 g/kg Spezifische Luftfeuchtigkeit 2 m über Boden; Momentanwert
pvaices0 hPa Sättigungsdampfdruck über Eis; Momentanwert

Leider sind die meisten hohen Korrelationen keine richtige Korrelationen, sondern zwei Variablen, welche etwas ähnliches beschreiben oder physikalische Zusammenhänge. Beispiel dafür ist die Korrelation von sre000z0 (Sonnenscheindauer) und gre000z0 (Globalstrahlung).

corrData <- data %>%
  select(
    "Böenspitze",
    "Windgeschwindigkeit",
    "Windrichtung",
    "Sonnenscheindauer",
    "Luftfeuchtigkeit",
    "Lufttemperatur",
    "Luftdruck",
  ) %>%
  cor(., use = "pairwise.complete.obs")
corrplot(corrData, method = "ellipse", order = "alphabet", type = "upper", tl.pos = "lt")

Die stärksten Korrelationen sind Windgeschwindigkeit ~ Böenspitze, LangwelligeEinstrahlung ~ Luftfeuchtigkeit und Luftdruck ~ Lufttemperatur. Mehr Text folgt… :)

4.2 Über das ganze Jahr (2020) blieb die mittlere Tagestemperatur unter 0°C.

granularity <- "day"

plot <- data %>%
  group_by(time = floor_date(time, granularity)) %>%
  summarise(
    mean_Lufttemperatur = mean(Lufttemperatur, na.rm = T),
    mean_Luftfeuchtigkeit = mean(Luftfeuchtigkeit, na.rm = T),
    mean_Windgeschwindigkeit = mean(Windgeschwindigkeit, na.rm = T),
    mean_Luftdruck = mean(Luftdruck, na.rm = T),
    Sonnenscheindauer_h = sum(Sonnenscheindauer, na.rm = T) / 60
  )

plot_ly(
  data = plot,
  type = "scatter",
  mode = "lines",
  width = 900,
  height = 700
) %>%
  add_trace(x = ~time, y = ~mean_Lufttemperatur, name = "Lufttemperatur °C") %>%
  layout(
    showlegend = TRUE,
    title = "Wetterverlauf im Jungfraujoch über das Jahr 2020",
    xaxis = list(
      title = "Zeitachse",
      rangeslider = list(visible = T),
      rangeselector = list(
        buttons = list(
          list(count = 1, label = "1m", step = "month", stepmode = "backward"),
          list(step = "all")
        )
      ),
      zerolinecolor = "#ffff",
      zerolinewidth = 2,
      gridcolor = "ffff",
      type = "date"
    ),
    yaxis = list(
      title = "",
      zerolinecolor = "#ffff",
      zerolinewidth = 2,
      gridcolor = "ffff"
    ),
    plot_bgcolor = "#e5ecf6",
    margin = 0.2
  )

4.3 Auf dem Jungfraujoch ist es kurz vor Sonnenaufgang am kältesten.

plot <- data %>%
  group_by(time = format(time, "%H:%M")) %>%
  summarise(
    mean_Lufttemperatur = mean(Lufttemperatur, na.rm = T),
    mean_Luftfeuchtigkeit = mean(Luftfeuchtigkeit, na.rm = T),
    mean_Windgeschwindigkeit = mean(Windgeschwindigkeit, na.rm = T),
    mean_Luftdruck = mean(Luftdruck, na.rm = T),
    Sonnenscheindauer_h = mean(Sonnenscheindauer, na.rm = T)
  )

plot_ly(
  data = plot,
  type = "scatter",
  mode = "lines",
  width = 900,
  height = 700
) %>%
  add_trace(x = ~time, y = ~mean_Lufttemperatur, name = "Lufttemperatur °C") %>%
  add_trace(x = ~time, y = ~mean_Luftfeuchtigkeit, name = "Luftfeuchtigkeit in %", visible = "legendonly") %>%
  add_trace(x = ~time, y = ~Sonnenscheindauer_h, name = "Sonnenscheindauer in h", visible = "legendonly") %>%
  add_trace(x = ~time, y = ~mean_Windgeschwindigkeit, name = "Windgeschwindigkeit in m/s", visible = "legendonly") %>%
  add_trace(x = ~time, y = ~mean_Luftdruck, name = "Luftdruck in hPa", visible = "legendonly") %>%
  layout(
    showlegend = TRUE,
    title = "Durchschnittliche Temperatur über den Tag auf dem Jungfraujoch im Jahr 2020",
    xaxis = list(
      title = "Uhrzeit",
      rangeslider = list(visible = T),
      rangeselector = list(
        buttons = list(
          list(count = 1, label = "1m", step = "month", stepmode = "backward"),
          list(step = "all")
        )
      ),
      zerolinecolor = "#ffff",
      zerolinewidth = 2,
      gridcolor = "ffff"
    ),
    yaxis = list(
      title = "",
      zerolinecolor = "#ffff",
      zerolinewidth = 2,
      gridcolor = "ffff"
    ),
    plot_bgcolor = "#e5ecf6",
    margin = 0.2,
    shapes = list(
      type = "rect",
      fillcolor = "yellow",
      line = list(color = "yellow"),
      opacity = 0.2,
      x0 = 33.4,
      x1 = 49.1,
      y0 = -6.1,
      y1 = -4.4
    )
  )

4.4 Die Sonne scheint auf dem Jungfraujoch das ganze Jahr etwa gleich lange.

4.4.1 Erstellung der Funktion für einfaches Plotten

visualize <- function(granularity) {
  plot <- data %>%
    group_by(time = floor_date(time, granularity)) %>%
    summarise(
      mean_Lufttemperatur = mean(Lufttemperatur, na.rm = T),
      mean_Luftfeuchtigkeit = mean(Luftfeuchtigkeit, na.rm = T),
      mean_Windgeschwindigkeit = mean(Windgeschwindigkeit, na.rm = T),
      mean_Luftdruck = mean(Luftdruck, na.rm = T),
      Sonnenscheindauer_h = sum(Sonnenscheindauer, na.rm = T) / 60
    )

  plot_ly(
    data = plot,
    type = "scatter",
    mode = "lines",
    width = 900,
    height = 700
  ) %>%
    add_trace(x = ~time, y = ~mean_Lufttemperatur, name = "Lufttemperatur °C", visible = "legendonly") %>%
    add_trace(x = ~time, y = ~mean_Luftfeuchtigkeit, name = "Luftfeuchtigkeit in %", visible = "legendonly") %>%
    add_trace(x = ~time, y = ~Sonnenscheindauer_h, name = "Sonnenscheindauer in h") %>%
    add_trace(x = ~time, y = ~mean_Windgeschwindigkeit, name = "Windgeschwindigkeit in m/s", visible = "legendonly") %>%
    add_trace(x = ~time, y = ~mean_Luftdruck, name = "Luftdruck in hPa", visible = "legendonly") %>%
    layout(
      showlegend = TRUE,
      title = "Wetterverlauf im Jungfraujoch über das Jahr 2020",
      xaxis = list(
        title = "Zeitachse",
        rangeslider = list(visible = T),
        rangeselector = list(
          buttons = list(
            list(count = 1, label = "1m", step = "month", stepmode = "backward"),
            list(step = "all")
          )
        ),
        zerolinecolor = "#ffff",
        zerolinewidth = 2,
        gridcolor = "ffff"
      ),
      yaxis = list(
        title = "",
        zerolinecolor = "#ffff",
        zerolinewidth = 2,
        gridcolor = "ffff"
      ),
      plot_bgcolor = "#e5ecf6",
      margin = 0.2
    )
}

4.4.2 Granularity Hour

visualize("hour")

4.4.3 Granularity Day

visualize("day")

4.4.4 Granularity Week

visualize("week")

4.4.5 Granularity Month

visualize("month")